package demo01;

public class Test01 {
    /*
    一般地接口名以 I 开头最好 ，接口的命名一般使用形容词 ， 阿里编码规范中约定 ，接口中的方法和属性不要加任何修饰符好 ，以保持代码的简洁性 。
    一个接口会对应一个 class 文件
    接口使用 interface 关键字来定义
    接口不能被实例化
    接口当中的成员变量 默认是 public static final 修饰的 ，不写的时候也默认是这个
    接口当中的方法 ， 如果有具体实现 只能被 static 或者 default 修饰 ， 这些方法默认都是 public 修饰的
    接口中的方法如果没有具体实现 那么就写为抽象方法 public abstrat 修饰的方法 ， 此时这个方法默认是 public abstrat
        定义抽象方法：(以下几种定义方式均相同 默认都是 public abstrat )
        public abstract void method1();
        public void method2();
        abstract void method3();
        void method4();
    那么 ， 其他类如何与接口建立一个关系呢？
        类和接口我们使用 implements 来实现
     当一个类实现一个接口以后 ， 这个接口所包含的所有的抽象方法都比需要重写
     实现该接口以后 ， 就要实现该接口中的抽象方法
     接口中不能有静态代码块和构造方法
     接口虽然不是类 ， 但是接口编译完成后字节码文件的后缀格式也是 .class
     如果类没有实现接口中的抽象方法 ， 则该类必须设置为抽象方法

    * */
    public static void main1(String[] args) {
        Ishape iShape1 = new Flower();//向上转型
        Ishape iShape2 = new Rect();//向上转型
        Ishape iShape3 = new Cycle();//向上转型
        iShape1.draw();
        iShape2.draw();
        iShape3.draw();
    }

    public static void drawMap(Ishape iShape){
        iShape.draw();
    }
    public static void main(String[] args) {
        drawMap(new Flower());
        drawMap(new Rect());
        drawMap(new Cycle());
    }

}
